import librosa
import random
import itertools
import numpy as np
import pandas as pd
import os
from numpy import mean
from numpy import std
from numpy import dstack, stack, vstack, hstack
from pandas import read_csv
import matplotlib.pyplot as plt
from scipy import signal
from scipy.signal import find_peaks
from os.path import join
from scipy.fft import fft, ifft, fftfreq, fftshift
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, classification_report, ConfusionMatrixDisplay, f1_score
from sklearn.preprocessing import MinMaxScaler, RobustScaler
from sklearn import preprocessing
import tensorflow as tf
from tensorflow.keras import Sequential,Input, layers
from tensorflow.keras.layers import Input, Dense, Dropout, Flatten, GlobalMaxPool1D, LSTM, Embedding, MaxPool1D
from tensorflow.keras.models import load_model, Model
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.utils import to_categorical
from keras.utils.vis_utils import plot_model
from keras.layers.convolutional import Conv1D
from keras.layers.convolutional import MaxPooling1D
from keras.layers import concatenate
from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d import proj3d
frame_length = 128
hop_length = 16
split_sec = 10
from random import gauss
from random import seed
file_path = 'data/'
file_list = os.listdir(file_path)
file_list
['fast_incline.csv', 'fast_decline.csv', '221108', 'fast_gravelly.csv', '221107', '221105', 'fast_even.csv', 'slow_even.csv']
# data import
fast_incline = read_csv(file_path + file_list[0], header=None)
fast_decline = read_csv(file_path + file_list[1], header=None)
fast_gravelly = read_csv(file_path + file_list[3], header=None)
fast_even = read_csv(file_path + file_list[6], header=None)
slow_even = read_csv(file_path + file_list[7], header=None)
print(
fast_even.shape,
slow_even.shape,
fast_incline.shape,
fast_decline.shape,
fast_gravelly.shape
)
(105174, 7) (88672, 7) (103681, 7) (92226, 7) (101921, 7)
file_list
['fast_incline.csv', 'fast_decline.csv', '221108', 'fast_gravelly.csv', '221107', '221105', 'fast_even.csv', 'slow_even.csv']
terrain = fast_even
raw_data = terrain[1].to_numpy()[:-1280*split_sec]*0.7
print(raw_data.max() - raw_data.min())
1.795941
seed(1)
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
wn_series = raw_data + series
plt.figure(figsize=(8,4))
x = np.arange(len(wn_series))/1280
plt.plot(x, wn_series, label = 'with noise')
plt.plot(x, raw_data, label = 'raw signal')
plt.title('Signal comparing')
plt.xlabel('Time(s)')
plt.ylabel('A.U.(arbitary unit)')
plt.legend()
plt.xlim(0,0.3)
(0.0, 0.3)
seed(1)
# trans = RobustScaler()
terrain = fast_even
raw_data = terrain[1].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_1 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data1 = trans.fit_transform(frames_1)
raw_data = terrain[2].to_numpy()[:-1280*split_sec]*0.7
frames_2 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
# data2 = trans.fit_transform(frames_2)
raw_data = terrain[3].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_3 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data3 = trans.fit_transform(frames_3)
raw_data = terrain[4].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_4 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data4 = trans.fit_transform(frames_4)
raw_data = terrain[5].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_5 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data5 = trans.fit_transform(frames_5)
raw_data = terrain[6].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_6 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data6 = trans.fit_transform(frames_6)
# stacked_fast_even = np.dstack((data1, data2, data3, data4, data5, data6))
stacked_fast_even = np.dstack((frames_1, frames_2, frames_3, frames_4, frames_5, frames_6))
print(stacked_fast_even.shape)
#---------------------------------------------------------------------------------------------------------------#
raw_data = terrain[1].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_1 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data1 = trans.fit_transform(frames_1)
raw_data = terrain[2].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_2 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data2 = trans.fit_transform(frames_2)
raw_data = terrain[3].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_3 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data3 = trans.fit_transform(frames_3)
raw_data = terrain[4].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_4 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data4 = trans.fit_transform(frames_4)
raw_data = terrain[5].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_5 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data5 = trans.fit_transform(frames_5)
raw_data = terrain[6].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_6 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data6 = trans.fit_transform(frames_6)
# stacked_fast_even = np.dstack((data1, data2, data3, data4, data5, data6))
stacked_fast_even_test = np.dstack((frames_1, frames_2, frames_3, frames_4, frames_5, frames_6))
print(stacked_fast_even_test.shape)
(5766, 128, 6) (793, 128, 6)
f, axes = plt.subplots(2, 3)
# 격자 크기 설정
f.set_size_inches((20, 15))
# 격자 여백 설정
plt.subplots_adjust(wspace = 0.1, hspace = 0.1)
data = frames_1
for i in range(10):
axes[0,0].plot(data[i])
data = frames_2
for i in range(10):
axes[0, 1].plot(data[i])
data = frames_3
for i in range(10):
axes[0, 2].plot(data[i])
data = frames_4
for i in range(10):
axes[1, 0].plot(data[i])
data = frames_5
for i in range(10):
axes[1, 1].plot(data[i])
data = frames_6
for i in range(10):
axes[1, 2].plot(data[i])
plt.show()
# trans = RobustScaler()
terrain = slow_even
raw_data = terrain[1].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_1 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data1 = trans.fit_transform(frames_1)
raw_data = terrain[2].to_numpy()[:-1280*split_sec]*0.7
frames_2 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
# data2 = trans.fit_transform(frames_2)
raw_data = terrain[3].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_3 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data3 = trans.fit_transform(frames_3)
raw_data = terrain[4].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_4 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data4 = trans.fit_transform(frames_4)
raw_data = terrain[5].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_5 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data5 = trans.fit_transform(frames_5)
raw_data = terrain[6].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_6 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data6 = trans.fit_transform(frames_6)
# stacked_fast_even = np.dstack((data1, data2, data3, data4, data5, data6))
stacked_slow_even = np.dstack((frames_1, frames_2, frames_3, frames_4, frames_5, frames_6))
print(stacked_slow_even.shape)
#---------------------------------------------------------------------------------------------------------------#
raw_data = terrain[1].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_1 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data1 = trans.fit_transform(frames_1)
raw_data = terrain[2].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_2 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data2 = trans.fit_transform(frames_2)
raw_data = terrain[3].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_3 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data3 = trans.fit_transform(frames_3)
raw_data = terrain[4].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_4 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data4 = trans.fit_transform(frames_4)
raw_data = terrain[5].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_5 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data5 = trans.fit_transform(frames_5)
raw_data = terrain[6].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_6 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data6 = trans.fit_transform(frames_6)
# stacked_fast_even = np.dstack((data1, data2, data3, data4, data5, data6))
stacked_slow_even_test = np.dstack((frames_1, frames_2, frames_3, frames_4, frames_5, frames_6))
print(stacked_slow_even_test.shape)
(4735, 128, 6) (793, 128, 6)
f, axes = plt.subplots(2, 3)
# 격자 크기 설정
f.set_size_inches((20, 15))
# 격자 여백 설정
plt.subplots_adjust(wspace = 0.1, hspace = 0.1)
data = frames_1
for i in range(10):
axes[0,0].plot(data[i])
data = frames_2
for i in range(10):
axes[0, 1].plot(data[i])
data = frames_3
for i in range(10):
axes[0, 2].plot(data[i])
data = frames_4
for i in range(10):
axes[1, 0].plot(data[i])
data = frames_5
for i in range(10):
axes[1, 1].plot(data[i])
data = frames_6
for i in range(10):
axes[1, 2].plot(data[i])
plt.show()
# trans = RobustScaler()
terrain = fast_incline
raw_data = terrain[1].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_1 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data1 = trans.fit_transform(frames_1)
raw_data = terrain[2].to_numpy()[:-1280*split_sec]*0.7
frames_2 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
# data2 = trans.fit_transform(frames_2)
raw_data = terrain[3].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_3 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data3 = trans.fit_transform(frames_3)
raw_data = terrain[4].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_4 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data4 = trans.fit_transform(frames_4)
raw_data = terrain[5].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_5 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data5 = trans.fit_transform(frames_5)
raw_data = terrain[6].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_6 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data6 = trans.fit_transform(frames_6)
# stacked_fast_even = np.dstack((data1, data2, data3, data4, data5, data6))
stacked_fast_incline = np.dstack((frames_1, frames_2, frames_3, frames_4, frames_5, frames_6))
print(stacked_fast_incline.shape)
#---------------------------------------------------------------------------------------------------------------#
raw_data = terrain[1].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_1 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data1 = trans.fit_transform(frames_1)
raw_data = terrain[2].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_2 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data2 = trans.fit_transform(frames_2)
raw_data = terrain[3].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_3 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data3 = trans.fit_transform(frames_3)
raw_data = terrain[4].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_4 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data4 = trans.fit_transform(frames_4)
raw_data = terrain[5].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_5 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data5 = trans.fit_transform(frames_5)
raw_data = terrain[6].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_6 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data6 = trans.fit_transform(frames_6)
# stacked_fast_even = np.dstack((data1, data2, data3, data4, data5, data6))
stacked_fast_incline_test = np.dstack((frames_1, frames_2, frames_3, frames_4, frames_5, frames_6))
print(stacked_fast_incline_test.shape)
(5673, 128, 6) (793, 128, 6)
f, axes = plt.subplots(2, 3)
# 격자 크기 설정
f.set_size_inches((20, 15))
# 격자 여백 설정
plt.subplots_adjust(wspace = 0.1, hspace = 0.1)
data = frames_1
for i in range(10):
axes[0,0].plot(data[i])
data = frames_2
for i in range(10):
axes[0, 1].plot(data[i])
data = frames_3
for i in range(10):
axes[0, 2].plot(data[i])
data = frames_4
for i in range(10):
axes[1, 0].plot(data[i])
data = frames_5
for i in range(10):
axes[1, 1].plot(data[i])
data = frames_6
for i in range(10):
axes[1, 2].plot(data[i])
plt.show()
# trans = RobustScaler()
terrain = fast_decline
raw_data = terrain[1].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_1 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data1 = trans.fit_transform(frames_1)
raw_data = terrain[2].to_numpy()[:-1280*split_sec]*0.7
frames_2 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
# data2 = trans.fit_transform(frames_2)
raw_data = terrain[3].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_3 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data3 = trans.fit_transform(frames_3)
raw_data = terrain[4].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_4 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data4 = trans.fit_transform(frames_4)
raw_data = terrain[5].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_5 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data5 = trans.fit_transform(frames_5)
raw_data = terrain[6].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_6 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data6 = trans.fit_transform(frames_6)
# stacked_fast_even = np.dstack((data1, data2, data3, data4, data5, data6))
stacked_fast_decline = np.dstack((frames_1, frames_2, frames_3, frames_4, frames_5, frames_6))
print(stacked_fast_decline.shape)
#---------------------------------------------------------------------------------------------------------------#
raw_data = terrain[1].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_1 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data1 = trans.fit_transform(frames_1)
raw_data = terrain[2].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_2 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data2 = trans.fit_transform(frames_2)
raw_data = terrain[3].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_3 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data3 = trans.fit_transform(frames_3)
raw_data = terrain[4].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_4 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data4 = trans.fit_transform(frames_4)
raw_data = terrain[5].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_5 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data5 = trans.fit_transform(frames_5)
raw_data = terrain[6].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_6 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data6 = trans.fit_transform(frames_6)
# stacked_fast_even = np.dstack((data1, data2, data3, data4, data5, data6))
stacked_fast_decline_test = np.dstack((frames_1, frames_2, frames_3, frames_4, frames_5, frames_6))
print(stacked_fast_decline_test.shape)
(4957, 128, 6) (793, 128, 6)
f, axes = plt.subplots(2, 3)
# 격자 크기 설정
f.set_size_inches((20, 15))
# 격자 여백 설정
plt.subplots_adjust(wspace = 0.1, hspace = 0.1)
data = frames_1
for i in range(10):
axes[0,0].plot(data[i])
data = frames_2
for i in range(10):
axes[0, 1].plot(data[i])
data = frames_3
for i in range(10):
axes[0, 2].plot(data[i])
data = frames_4
for i in range(10):
axes[1, 0].plot(data[i])
data = frames_5
for i in range(10):
axes[1, 1].plot(data[i])
data = frames_6
for i in range(10):
axes[1, 2].plot(data[i])
plt.show()
# trans = RobustScaler()
terrain = fast_gravelly
raw_data = terrain[1].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_1 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data1 = trans.fit_transform(frames_1)
raw_data = terrain[2].to_numpy()[:-1280*split_sec]*0.7
frames_2 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
# data2 = trans.fit_transform(frames_2)
raw_data = terrain[3].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_3 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data3 = trans.fit_transform(frames_3)
raw_data = terrain[4].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_4 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data4 = trans.fit_transform(frames_4)
raw_data = terrain[5].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_5 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data5 = trans.fit_transform(frames_5)
raw_data = terrain[6].to_numpy()[:-1280*split_sec]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_6 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data6 = trans.fit_transform(frames_6)
# stacked_fast_even = np.dstack((data1, data2, data3, data4, data5, data6))
stacked_fast_gravelly = np.dstack((frames_1, frames_2, frames_3, frames_4, frames_5, frames_6))
print(stacked_fast_gravelly.shape)
#---------------------------------------------------------------------------------------------------------------#
raw_data = terrain[1].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_1 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data1 = trans.fit_transform(frames_1)
raw_data = terrain[2].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_2 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data2 = trans.fit_transform(frames_2)
raw_data = terrain[3].to_numpy()[-1280*split_sec:]*0.7*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_3 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data3 = trans.fit_transform(frames_3)
raw_data = terrain[4].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_4 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data4 = trans.fit_transform(frames_4)
raw_data = terrain[5].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_5 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data5 = trans.fit_transform(frames_5)
raw_data = terrain[6].to_numpy()[-1280*split_sec:]*0.7
series = np.array([gauss(0.0, 0.3) for i in range(len(raw_data))])
raw_data = raw_data + series
frames_6 = librosa.util.frame(np.array(raw_data), frame_length=frame_length, hop_length=hop_length, axis=0)
# data6 = trans.fit_transform(frames_6)
# stacked_fast_even = np.dstack((data1, data2, data3, data4, data5, data6))
stacked_fast_gravelly_test = np.dstack((frames_1, frames_2, frames_3, frames_4, frames_5, frames_6))
print(stacked_fast_gravelly_test.shape)
(5563, 128, 6) (793, 128, 6)
f, axes = plt.subplots(2, 3)
# 격자 크기 설정
f.set_size_inches((20, 15))
# 격자 여백 설정
plt.subplots_adjust(wspace = 0.1, hspace = 0.1)
data = frames_1
for i in range(10):
axes[0,0].plot(data[i])
data = frames_2
for i in range(10):
axes[0, 1].plot(data[i])
data = frames_3
for i in range(10):
axes[0, 2].plot(data[i])
data = frames_4
for i in range(10):
axes[1, 0].plot(data[i])
data = frames_5
for i in range(10):
axes[1, 1].plot(data[i])
data = frames_6
for i in range(10):
axes[1, 2].plot(data[i])
plt.show()
def label_making (x,label):
output=[]
while len(output) < len(x):
output.append([label])
return (output)
# label making
y1 = label_making(stacked_fast_even,0)
y2 = label_making(stacked_slow_even,1)
y3 = label_making(stacked_fast_incline,2)
y4 = label_making(stacked_fast_decline,3)
y5 = label_making(stacked_fast_gravelly,4)
t1 = label_making(stacked_fast_even_test,0)
t2 = label_making(stacked_slow_even_test,1)
t3 = label_making(stacked_fast_incline_test,2)
t4 = label_making(stacked_fast_decline_test,3)
t5 = label_making(stacked_fast_gravelly_test,4)
# x_input = np.vstack([stacked_fast_even, stacked_slow_even, stacked_fast_incline, stacked_fast_decline, stacked_fast_gravelly])
# label_input = y1 + y2 + y3 + y4 + y5
# label_input = to_categorical(label_input)
# testX = np.vstack([stacked_fast_even_test, stacked_slow_even_test, stacked_fast_incline_test, stacked_fast_decline_test, stacked_fast_gravelly_test])
# testy = t1 + t2 + t3 + t4 + t5
# testy = to_categorical(testy)
x_input = np.vstack([stacked_fast_even, stacked_fast_incline, stacked_fast_decline, stacked_fast_gravelly])
label_input = y1 + y3 + y4 + y5
label_input = to_categorical(label_input)
testX = np.vstack([stacked_fast_even_test, stacked_fast_incline_test, stacked_fast_decline_test, stacked_fast_gravelly_test])
testy = t1 + t3 + t4 + t5
testy = to_categorical(testy)
# x_input = np.vstack([stacked_fast_even, stacked_slow_even])
# label_input = y1 + y2
# label_input = to_categorical(label_input)
# testX = np.vstack([stacked_fast_even_test, stacked_slow_even_test])
# testy = t1 + t2
# testy = to_categorical(testy)
print(x_input.shape,
label_input.shape,
testX.shape,
testy.shape
)
(21959, 128, 6) (21959, 5) (3172, 128, 6) (3172, 5)
trainX, valX, trainy, valy = train_test_split(x_input, label_input, test_size=0.33, stratify = label_input)
print( trainX.shape, valX.shape)
n_timesteps, n_features, n_outputs = trainX.shape[1], trainX.shape[2], trainy.shape[1]
(14712, 128, 6) (7247, 128, 6)
# fit and evaluate a model
def evaluate_model(trainX, trainy, valX, valy, testX, testy):
verbose, epochs, batch_size = 0, 10, 32
n_timesteps, n_features, n_outputs = trainX.shape[1], trainX.shape[2], trainy.shape[1]
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(n_timesteps,n_features)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(n_outputs, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit network
hist = model.fit(trainX, trainy, epochs=epochs, batch_size=batch_size, verbose=verbose, validation_data = (valX, valy))
# evaluate model
loss, accuracy = model.evaluate(testX, testy, batch_size=batch_size, verbose=0)
return loss, accuracy, hist
# loss, score, hist = evaluate_model(trainX, trainy, testX, testy)
# print(score)
loss, score, hist = evaluate_model(trainX, trainy, valX, valy, testX, testy)
print(score)
0.9810844659805298
verbose, epochs, batch_size = 0, 50, 32
n_timesteps, n_features, n_outputs = x_input.shape[1], x_input.shape[2], label_input.shape[1]
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(n_timesteps,n_features)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(n_outputs, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
# fit network
hist = model.fit(trainX, trainy, epochs=epochs, batch_size=batch_size, verbose=verbose, validation_data = (valX, valy))
# model.save
# model.save('saved_models/terrain_classifer_211206', overwrite=True)
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d_2 (Conv1D) (None, 126, 64) 1216
conv1d_3 (Conv1D) (None, 124, 64) 12352
dropout_1 (Dropout) (None, 124, 64) 0
max_pooling1d_1 (MaxPooling (None, 62, 64) 0
1D)
flatten_1 (Flatten) (None, 3968) 0
dense_2 (Dense) (None, 100) 396900
dense_3 (Dense) (None, 5) 505
=================================================================
Total params: 410,973
Trainable params: 410,973
Non-trainable params: 0
_________________________________________________________________
model.save('saved_models/terrain_classifer_with_noise_sensitivity_reduction_230226', overwrite=True)
WARNING:absl:Found untraced functions such as _jit_compiled_convolution_op, _jit_compiled_convolution_op, _update_step_xla while saving (showing 3 of 3). These functions will not be directly callable after loading.
INFO:tensorflow:Assets written to: saved_models/terrain_classifer_with_noise_sensitivity_reduction_230226/assets
INFO:tensorflow:Assets written to: saved_models/terrain_classifer_with_noise_sensitivity_reduction_230226/assets
# import tensorflow as tf
# converter = tf.lite.TFLiteConverter.from_saved_model("saved_models/terrain_classifer_with_noise_230221") # path to the SavedModel directory
# # converter.optimizations = [tf.lite.Optimize.DEFAULT]
# tflite_model = converter.convert()
# # Save the model.
# with open('saved_models/terrain_classifier_211206.tflite', 'wb') as f:
# f.write(tflite_model)
# !xxd -i 'saved_models/terrain_classifier_211206.tflite' > 'saved_models/terrain_classifier_211206.cc'
# Confusion matrix
y_predict = model.predict(testX, batch_size = 32, verbose = 0)
y_predict = np.around(y_predict)
cm = confusion_matrix(testy.argmax(axis=1), y_predict.argmax(axis=1))
# Confustion matrix plotting
plt.figure(figsize=(10,8))
plt.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)
plt.title('confusion matrix')
plt.colorbar()
thresh = cm.max() / 2.
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, np.round(cm[i, j]/(np.sum(cm, 1)[i]), 2),
horizontalalignment="center", fontdict={'fontsize': 40},
color="white" if cm[i, j] > thresh else "black")
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
# plt.savefig('saved_images/220414/confusion_matrix.svg', dpi='figure', format='svg')
Text(0.5, 51.0, 'Predicted label')
cm
array([[793, 0, 0, 0],
[ 0, 793, 0, 0],
[ 17, 0, 775, 1],
[ 2, 0, 6, 785]])
# y_predict = model.predict(testX, batch_size = 32, verbose = 0)
# # disp = ConfusionMatrixDisplay.from_predictions(y_true = testy.argmax(axis=1), y_pred = y_predict.argmax(axis=1), normalize='true',
# # values_format='.2%', cmap='Blues', xticks_rotation = 15,
# # display_labels=('even', 'incline', 'decline', 'gravelly'))
# y_predict = model.predict(testX, batch_size = 32, verbose = 0)
# disp = ConfusionMatrixDisplay.from_predictions(y_true = testy.argmax(axis=1), y_pred = y_predict.argmax(axis=1), normalize='true',
# values_format='.2%', cmap='Blues', xticks_rotation = 15,
# display_labels=('fast', 'slow'))
# # plt.savefig('saved_images/220418/fast_slow_confusion_matrix_2class.svg', dpi='figure', format='svg')
print(
f1_score(testy.argmax(axis=1), y_predict.argmax(axis=1), average='macro'),
f1_score(testy.argmax(axis=1), y_predict.argmax(axis=1), average='micro'),
f1_score(testy.argmax(axis=1), y_predict.argmax(axis=1), average='weighted')
)
0.9971590343090766 0.9971626733921816 0.9971590343090765
pred_to0 = np.zeros(5)
pred_to1 = np.zeros(5)
pred_to2 = np.zeros(5)
pred_to3 = np.zeros(5)
pred_to4 = np.zeros(5)
count0 = 0
count1 = 0
count2 = 0
count3 = 0
count4 = 0
y_predict = model.predict(testX, batch_size = 32, verbose = 0)
for index, val in enumerate(y_predict.argmax(axis=1)):
if val == 0:
pred_to0 += y_predict[index]
count0 += 1
elif val ==1:
pred_to1 += y_predict[index]
count1 += 1
elif val ==2:
pred_to2 += y_predict[index]
count2 += 1
elif val ==3:
pred_to3 += y_predict[index]
count3 += 1
elif val ==4:
pred_to4 += y_predict[index]
count4 += 1
print(count0, count1, count2, count3, count4)
799 0 793 784 796
cm/793
array([[1. , 0. , 0. , 0. ],
[0. , 1. , 0. , 0. ],
[0.0075662 , 0. , 0.98865069, 0.0037831 ],
[0. , 0. , 0. , 1. ]])
# print(
# cm[0,0],
# cm[1,1],
# cm[2,2],
# cm[3,3],
# cm[4,4]
# )
y_predict[2]
pred_to1
print(np.round(pred_to0/count0*100, 3), '\n',
np.round(pred_to1/count1*100, 3), '\n',
np.round(pred_to2/count2*100, 3), '\n',
np.round(pred_to3/count3*100, 3), '\n',
np.round(pred_to4/count4*100, 3), '\n',
)
fig, loss_ax = plt.subplots()
acc_ax = loss_ax.twinx()
loss_ax.plot(hist.history['loss'], 'y', label='train loss')
loss_ax.plot(hist.history['val_loss'], 'r', label='val loss')
loss_ax.set_xlabel('epoch')
loss_ax.set_ylabel('loss')
loss_ax.legend(loc='lower right')
acc_ax.plot(hist.history['accuracy'], 'b', label='train acc')
acc_ax.plot(hist.history['val_accuracy'], 'g', label='val acc')
acc_ax.set_ylabel('accuracy')
acc_ax.legend(loc='upper right')
plt.savefig('saved_images/220414/acc_loss_trend.svg', dpi='figure', format='svg')
# repeat experiment
repeats = 10
scores = []
for r in range(repeats):
loss, score, hist = evaluate_model(trainX, trainy, valX, valy, testX, testy)
score = score * 100.0
print('>#%d: %.3f' % (r+1, score))
scores.append(score)
>#1: 100.000 >#2: 100.000 >#3: 100.000 >#4: 100.000 >#5: 100.000 >#6: 100.000 >#7: 100.000 >#8: 100.000 >#9: 100.000 >#10: 100.000
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
# Compute ROC curve and ROC area for each class
n_classes = n_outputs
y_test = testy
y_score = model.predict(testX, batch_size = 5, verbose = 0)
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
# Compute micro-average ROC curve and ROC area
fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
# Plot of a ROC curve for a specific class
plt.figure()
plt.plot(fpr[2], tpr[2], label='ROC curve (area = %0.2f)' % roc_auc[2])
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 0.001])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.savefig('saved_images/220414/ROC_curve_1.svg', dpi='figure', format='svg')
# Plot ROC curve
plt.figure()
plt.plot(fpr["micro"], tpr["micro"],
label='micro-average ROC curve (area = {0:0.2f})'
''.format(roc_auc["micro"]))
for i in range(n_classes):
plt.plot(fpr[i], tpr[i], label='ROC curve of class {0} (area = {1:0.2f})'
''.format(i, roc_auc[i]))
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Some extension of Receiver operating characteristic to multi-class')
plt.legend(loc="lower right")
plt.savefig('saved_images/220414/ROC_curve_2.svg', dpi='figure', format='svg')